package cn.wen.java.utils;

import java.util.Calendar;
import java.util.Date;

/**
 * Title：日期时间工具实体类
 * <p>
 * Description：日期扩展
 * <p>
 * Copyright：Copyright (c) 2010-2013
 * 
 * @author <a href="mailto:ct_wen@qq.com">ctwen</a>, 温承瑭
 * @version Revision：1.0 Date：2013/3/2 Description：初完成。
 *          <p>
 *          <p>
 * @see cn.wen.java.utils.HelperOfDate
 * @see org.apache.commons.lang.time.DateUtils
 */
public class XDate {

    public XDate() {
	super();
	this.date = new Date();
    }

    public XDate(Date date) {
	super();
	this.date = date;
    }

    public XDate(String date) {
	super();
	this.date = HelperOfDate.parse(date);
    }

    /**
     * 操作日期。
     */
    private Date date = null;

    public Date getDate() {
	return date;
    }

    public void setDate(Date date) {
	this.date = date;
    }

    public void setDate(String date) {
	this.date = HelperOfDate.parse(date);
    }

    public int getDiffDay(Date d1, Date d2) {
	return (int) ((d1.getTime() - d2.getTime()) / (24 * 60 * 60 * 1000));
    }

    public int getDiffDay(String d1, String d2) {
	return getDiffDay(HelperOfDate.parse(d1), HelperOfDate.parse(d2));
    }

    /**
     * @return 本年首日。
     */
    public Date getFirstDayOfYear() {
	return HelperOfDate.getFirstDayOfYear(date);
    }

    /**
     * @return 本月首日。
     */
    public Date getFirstDayOfMonth() {
	return HelperOfDate.getFirstDayOfMonth(date);
    }

    /**
     * @return 本周首日。
     */
    public Date getFirstDayOfWeek() {
	return HelperOfDate.getFirstDayOfWeek(date);
    }

    /**
     * @return 本周末日。
     */
    public Date getLastDayOfWeek() {
	return HelperOfDate.getLastDayOfWeek(date);
    }

    /**
     * @return 本月末日。
     */
    public Date getLastDayOfMonth() {
	return HelperOfDate.getLastDayOfMonth(date);
    }

    /**
     * @return 本年末日。
     */
    public Date getLastDayOfYear() {
	return HelperOfDate.getLastDayOfYear(date);
    }

    /**
     * @return 是否闰年？
     */
    public boolean isLeapYear() {
	Calendar cale = Calendar.getInstance();
	cale.setTime(date);
	int year = cale.get(Calendar.YEAR);
	return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }

    @Override
    public String toString() {
	return toString(HelperOfDate.P2_YMDHMS);
    }

    public String toString(String pattern) {
	return HelperOfDate.format(date, pattern);
    }

}
